package ar.edu.unrn.lia.dao.impl;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.inject.Named;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;

import ar.edu.unrn.lia.dao.BarrioDAO;
import ar.edu.unrn.lia.generic.GenericDaoJpaImpl;
import ar.edu.unrn.lia.model.Barrio;
import ar.edu.unrn.lia.model.Alquiler.AlquilerEstado;
import ar.edu.unrn.lia.model.Barrio.Zona;

@Named("barrioDAO")
public class BarrioDAOImpl extends GenericDaoJpaImpl<Barrio, Long> implements
		BarrioDAO, Serializable {

	public Predicate[] getSearchPredicates(Root<Barrio> root,
			Map<String, String> filters) {

		CriteriaBuilder builder = this.entityManager.getCriteriaBuilder();
		List<Predicate> predicatesList = new ArrayList<Predicate>();
		root.alias("entity");

		String descripcion = filters.get("descripcion");
		if (descripcion != null && !"".equals(descripcion)) {
			predicatesList.add(builder.like(root.<String> get("descripcion"),
					'%' + descripcion + '%'));
		}
		
		String zona = filters.get("zona");
		if (zona != null && !"".equals(zona)) {
			for (Zona av : Zona.values()) {
				if (av.toString().equals(zona))
				{
					predicatesList.add(builder.equal(root.get("zona"),av));
				}
			}	
		}
		
		
		
		String ciudad = filters.get("ciudad.descripcion");
		if (ciudad != null && !"".equals(ciudad)) {
			predicatesList.add(builder.like(root.get("ciudad").<String> get("descripcion"),
					'%' + ciudad + '%'));
		}
		
		String provincia = filters.get("ciudad.provincia.descripcion");
		if (provincia != null && !"".equals(provincia)) {
			predicatesList.add(builder.like(root.get("ciudad").get("provincia").<String> get("descripcion"),
					'%' + provincia + '%'));
		}


		return predicatesList.toArray(new Predicate[predicatesList.size()]);
	}

}